package com.divemotor.ventarepuestosinternet.model;

import java.io.Serializable;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name = "TAL_MAE_MODELO_FABRICA")
@NamedQueries({
	@NamedQuery(name="ModeloFabrica.obtenerModeloFabrica", 
				query="SELECT DISTINCT new com.divemotor.ventarepuestosinternet.beans.adapter.ModeloFabricaDataAdapter(" +
					  "m.modeloFabricaPK.idModeloFabrica, m.modeloFabricaPK.idMarca, " +
					  "m.modeloFabricaPK.idTipoComponente, m.nombre) " +
					  "FROM ModeloFabrica m WHERE m.estado = 'A'")
})
public class ModeloFabrica  implements Serializable {

	private static final long serialVersionUID = -4153297495058060148L;

	@EmbeddedId
	private ModeloFabricaPK modeloFabricaPK;
	@Column(name = "DES_MODELO_FABRICA", length = 200)
	private String nombre;
	@Column(name = "COD_CATALOGO_FABRICA", length = 5)
	private String codigo;
	@Column(name = "IND_ACTIVO", length = 1)
	private String estado;
	@ManyToOne
	@JoinColumn(name = "COD_MARCA", referencedColumnName = "COD_MARCA", insertable = false, updatable = false)
	private Marca marca;
	@ManyToOne
	@JoinColumn(name = "COD_TIPO_COMPONENTE", referencedColumnName = "COD_TIPO_COMPONENTE", insertable = false, updatable = false)
	private TipoComponente tipoComponente;
	@OneToMany(cascade = CascadeType.ALL, mappedBy = "modeloFabrica")
	private List<VehiculoModeloFabrica> listaVehiculoModeloFabrica;
	@OneToMany(cascade = CascadeType.ALL, mappedBy = "modeloFabrica")
	private List<Modelo> listaModelo;

	public ModeloFabrica() {
		
	}

	public ModeloFabrica(String idModeloFabrica, String idMarca, String idTipoComponente, String nombre) {
		this.modeloFabricaPK = new ModeloFabricaPK(idModeloFabrica, idMarca, idTipoComponente);
		this.nombre = nombre;
	}

	public ModeloFabricaPK getModeloFabricaPK() {
		return modeloFabricaPK;
	}

	public void setModeloFabricaPK(ModeloFabricaPK modeloFabricaPK) {
		this.modeloFabricaPK = modeloFabricaPK;
	}

	public Marca getMarca() {
		return marca;
	}

	public void setMarca(Marca marca) {
		this.marca = marca;
	}

	public TipoComponente getTipoComponente() {
		return tipoComponente;
	}

	public void setTipoComponente(TipoComponente tipoComponente) {
		this.tipoComponente = tipoComponente;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getCodigo() {
		return codigo;
	}

	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}

	public String getEstado() {
		return estado;
	}

	public void setEstado(String estado) {
		this.estado = estado;
	}
	
	public List<VehiculoModeloFabrica> getListaVehiculoModeloFabrica() {
		return listaVehiculoModeloFabrica;
	}

	public void setListaVehiculoModeloFabrica(
			List<VehiculoModeloFabrica> listaVehiculoModeloFabrica) {
		this.listaVehiculoModeloFabrica = listaVehiculoModeloFabrica;
	}

	public List<Modelo> getListaModelo() {
		return listaModelo;
	}

	public void setListaModelo(List<Modelo> listaModelo) {
		this.listaModelo = listaModelo;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((modeloFabricaPK == null) ? 0 : modeloFabricaPK.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj){
			return true;
		}
		if (obj == null){
			return false;
		}
		if (getClass() != obj.getClass()){
			return false;
		}
		ModeloFabrica other = (ModeloFabrica) obj;
		if (modeloFabricaPK == null) {
			if (other.modeloFabricaPK != null){
				return false;
			}
		} else if (!modeloFabricaPK.equals(other.modeloFabricaPK)){
			return false;
		}
		return true;
	}

	
	
}
